import axios from 'axios'
import { msgError } from "./message";
import { cache } from "./cache";
// 读取环境配置
const AppConfig = window.AppConfig;
// 全局设置，允许跨域请求带凭证
// axios.defaults.withCredentials = true; 
console.log(AppConfig)
// 创建 axios 实例
const request = axios.create({
    // 服务端api地址
    baseURL: AppConfig.BASE_API + AppConfig.BASE_API_MODULE,
    // 请求超时时间，25秒, 如果上传大文件需要更长
    timeout: 25 * 1000,
})
// 接口请求拦截
request.interceptors.request.use(config => {
    return config
})
// 接口响应拦截
request.interceptors.response.use((response) => {
    const result = response.data
    if (typeof (result) == 'string') {
        msgError('数据格式错误');
        return Promise.reject(result)
    }
    // result.status [ 200正常 500有错误 401未登录 403没有权限访问 404未找到资源]
    if (result.status === 403 || result.status === 404 || result.status === 500) {
        msgError(result.message);
        return Promise.reject(result)
    }
    // 未登录
    if (result.status === 401) {
        msgError(result.message);
        // 未登录清空缓存
        cache(null);
        // location.href = '/';
        return Promise.reject(result)
    }
    return result
}, (error) => {
    // 网络请求出错
    const errMsg = ((error.response || {}).data || {}).message || '请求出现错误，请稍后再试'
    msgError(errMsg);
    return Promise.reject(error)
})

/**
 * 请求二次封装，解决缓存不是最新的bug
 * @param {url,method,data,headers,tokenName} 
 * @returns 
 */
const vueAxios = function ({ url, method = "post", data = {},params = {}, headers = {}, tokenName = '' }) {
    tokenName = tokenName ? tokenName : AppConfig.BASE_API_TOKEN_NAME;
    var tokenValue = cache(tokenName);
    const tokenNameVal = headers[tokenName] ? headers[tokenName] : tokenValue;
    if (tokenNameVal) {
        headers[tokenName] = tokenNameVal;
    }
    return request({
        url,
        headers,
        method,
        data,
        params
    });
}
export { vueAxios as axios }